package com.peycash.monitoring.fachada.impl;

import java.math.BigDecimal;
import java.rmi.RemoteException;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import com.peycash.monitoring.ClienteDTO;
import com.peycash.monitoring.fachada.ClienteFachada;
import com.peycash.monitoring.servicio.ClienteServicio;
import com.peycash.monitoring.servicio.ServicioException;
import com.peycash.monitoring.utils.Constantes;
import com.peycash.ws.endpoint.ClienteOpEndpointProxy;
import com.peycash.ws.endpoint.NuevoClienteRequestDTO;
import com.peycash.ws.endpoint.NuevoClienteResponseDTO;

@Component
public class ClienteFachadaImpl implements ClienteFachada {

	@Autowired
	private ClienteServicio servicioCliente;
	private ClienteOpEndpointProxy proxy;
	private NuevoClienteRequestDTO request;
	private NuevoClienteResponseDTO response;

	public ClienteFachadaImpl() {
		proxy = new ClienteOpEndpointProxy();
	}

	private final Logger LOGGER = LoggerFactory
			.getLogger(ClienteFachadaImpl.class);

	@Override
	@Scheduled(cron = "*/10 * * * * ?")
	public void registraClientesEnvio() {
		try {
			List<ClienteDTO> listPendientes = servicioCliente.findPendientes();
			for (ClienteDTO dto : listPendientes) {
				request = new NuevoClienteRequestDTO();
				request.setNoCel(dto.getNoCel());
				request.setC1("");
				request.setC2("");
				request.setC3("");
				request.setFecha("");
				request.setTipo(Constantes.TIPO_CLIENTE_ENVIA);
				response = proxy.addCliente(request);
				updateStatusPendiente(dto.getId(),
						response.getCodigoRespuesta());
				LOGGER.debug("NUEVO CLIENTE REGISTRADO:::: 00 :::: "
						+ dto.getNoCel());
			}
		} catch (ServicioException e) {
			LOGGER.error(
					"ERROR EN REGISTRAR CLIENTES EN FACHADA::" + e.getMessage(),
					e);
		} catch (RemoteException e) {
			LOGGER.error(
					"ERROR EN REGISTRAR CLIENTES EN FACHADA::" + e.getMessage(),
					e);
		}
	}

	private void updateStatusPendiente(BigDecimal id, String response)
			throws ServicioException {
		if (response.equals(Constantes.WEB_SERVICE_RESPONSE_OK)) {
			servicioCliente.updateStatusPendientes(id);
		}
	}

}
